﻿namespace B.S.InOut.Mediators
{
    // 定义中介者接口
    public interface IBaseMediator<T> where T : class
    {
        // 异步获取所有实体
        Task<T[]> GetAllAsync();
        // 异步根据 ID 获取单个实体
        Task<T> GetByIdAsync(int id);
        // 异步插入实体
        Task<int> InsertAsync(T entity);
        // 异步更新实体
        Task<bool> UpdateAsync(T entity);
        // 异步删除实体
        Task<bool> DeleteAsync(int id);
    }

    // 实现中介者接口
    public class BaseMediator<T> : IBaseMediator<T> where T : class
    {
        private readonly IBaseRepository<T> _repository;

        public BaseMediator(IBaseRepository<T> repository)
        {
            _repository = repository;
        }

        // 异步获取所有实体
        public async Task<T[]> GetAllAsync()
        {
            return (await _repository.GetAllAsync()).ToArray();
        }

        // 异步根据 ID 获取单个实体
        public async Task<T> GetByIdAsync(int id)
        {
            return await _repository.GetByIdAsync(id);
        }

        // 异步插入实体
        public async Task<int> InsertAsync(T entity)
        {
            return await _repository.InsertAsync(entity);
        }

        // 异步更新实体
        public async Task<bool> UpdateAsync(T entity)
        {
            return await _repository.UpdateAsync(entity);
        }

        // 异步删除实体
        public async Task<bool> DeleteAsync(int id)
        {
            return await _repository.DeleteAsync(id);
        }
    }
}
